package com.itheima.myreflect2.Student.mythreadpool;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @program: Myset
 * @description:
 * @author: xuejingjing
 * @create: 2021-06-20 01:44
 **/
public class MyThreadPoolDemo3 {
    public static void main(String[] args) {
//        参数1：核心线程数量
//        参数2:最大线程数
//        参数3:空闲线程最大存活时间
//        参数4:时间单位,,这是啥意思？
//        参数5：任务队列（让任务在队列中等着，等有线程空闲了，再从这个队列中获取任务并执行） ，假如一次性提交了10个任务，最大线程数是5个，那么另外5个就要放到任务队列中。
//        参数6：创建线程工厂（按照默认的方式创建线程对象）
//        参数7：任务的拒绝策略
        //(1)什么时候拒绝任务  当提交的任务 >池子中最大线程数量+ 任务队列容量

//排队的数量（任务队列）\
        //超过的那些任务，我不要了
        //自己创建的线程池
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                2,
                5,
                2,//多久时间不执行，就把线程销毁
                TimeUnit.HOURS,
                new ArrayBlockingQueue<>(10),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
    //创建一个处理对象，交由线程池处理。
        threadPoolExecutor.submit(new MyRunnable());
        threadPoolExecutor.submit(new MyRunnable());

        for (int i = 0; i < 16; i++) {
            threadPoolExecutor.submit(new MyRunnable());
        }

        threadPoolExecutor.shutdown();

    }
}
